package singletontest;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * 既然多个线程可以同时进入getInstance() 方法，那么只需要对其进行同步synchronized处理即可。
 *
 * @author liuziyang
 * @create 2019-10-14 20:20
 */
public class SingletonTest3 {
    private static SingletonTest3 myObject;

    public SingletonTest3() {

    }

    /**
     * 虽然运行结果表明，成功实现了单例，但这种给整个方法上锁的解决方法效率太低。
     *
     * @return
     */
    synchronized public static SingletonTest3 getInstance() {
        try {
            if (myObject == null) {
                //模拟对象在创建之前做的一些准备工作
                Thread.sleep(3000);
                myObject = new SingletonTest3();
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return myObject;
    }


    public static void main(String[] args) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(SingletonTest3.getInstance().hashCode());
            }
        }).start();
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(SingletonTest3.getInstance().hashCode());
            }
        }).start();
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(SingletonTest3.getInstance().hashCode());
            }
        }).start();
    }
}
